package cn;

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
import java.util.Vector;

/*
* 主窗体
* */
public class GameFrame extends JFrame {

    HeroPlane heroPlane;
    //  定义集合存储子弹
    Vector<Bullet> bullets=new Vector<>();
    //  敌机集合
    Vector<EnemyPlane> enemys=new Vector<>();

    GameFrame frame;
    public GameFrame(){
        frame = this;
        //  创建英雄机
        heroPlane = new HeroPlane();
        heroPlane.start();
        //  设置窗体高度
        this.setSize(500,760);
        //标题
        this.setTitle("雷霆战机");
        this.setResizable(false);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        //  窗口可见
        this.setVisible(true);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    repaint();
                    try{
                        Thread.sleep(10);
                    } catch(InterruptedException e){
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        //  产生敌机的线程
        new Thread(){
            //  创建随机数的对象
            Random r = new Random();
            @Override
            public void run() {
                while (true){
                    EnemyPlane enemyPlane=new EnemyPlane(r.nextInt(450),0,frame);
                    enemyPlane.start();
                    //  添加敌机的时候，让x轴随机
                    enemys.add(enemyPlane);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }

    /*
    *在窗口上画内容，paint这个画笔的方法在窗口初始化的时候会默认的执行
    * @param g
    */
    public void paint(Graphics g){
        //System.out.println("绘制画板");
        //  画背景
        BufferedImage image = (BufferedImage) this.createImage(this.getSize().width,this.getSize().height);
        //  高效缓存的画笔
        Graphics bi = image.getGraphics();
        //  设置地图
        bi.drawImage(new ImageIcon("img/地图背景.jpg").getImage(),0,0,null);
        //  设置战机
        bi.drawImage(heroPlane.img,heroPlane.x,heroPlane.y,heroPlane.width,heroPlane.hight,null);
        //  设置子弹
        for (int i = 0; i < bullets.size(); i++) {
            Bullet bullet = bullets.get(i);
            if (bullet.y>0){
                bi.drawImage(bullet.image,bullet.x,bullet.y-=bullet.speed,bullet.width,bullet.hight,null);
            }
            else {
                bullets.remove(bullet);
            }
        }
        //  设置敌机
        for (int i = 0; i < enemys.size(); i++) {
            EnemyPlane ep = enemys.get(i);
            if(ep.y<760){
                bi.drawImage(ep.img,ep.x,ep.y+=ep.speed,ep.width,ep.hight,null);
            }
            else {
                enemys.remove(ep);
            }
        }

        //  生效
        g.drawImage(image,0,0,null);
    }

    public static void main(String[] args) {
        GameFrame frame= new GameFrame();
        Player player= new Player(frame);
        frame.addKeyListener(player);
    }
}
